package com.sinochem.yunlian.ship.common.util;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @Auther: zzd
 * @Dscription:
 * @Date: Create in 2017/12/22 16:08
 **/
public class MD5Util {
        // 全局数组
        private final static String[] strDigits = { "0", "1", "2", "3", "4", "5",
                "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };

        public MD5Util() {
        }

        /***
         * 返回形式为数字跟字符串
         * @param bByte
         * @return
         */
        private static String byteToArrayString(byte bByte) {
            int iRet = bByte;

            if (iRet < 0) {
                iRet += 256;
            }
            int iD1 = iRet / 16;
            int iD2 = iRet % 16;
            return strDigits[iD1] + strDigits[iD2];
        }

        /***
         * 返回形式只为数字
         * @param bByte
         * @return
         */
        private static String byteToNum(byte bByte) {
            int iRet = bByte;

            if (iRet < 0) {
                iRet += 256;
            }
            return String.valueOf(iRet);
        }

        /***
         * 转换字节数组为16进制字串
         * @param bByte
         * @return
         */
        private static String byteToString(byte[] bByte) {
            StringBuffer sBuffer = new StringBuffer();
            for (int i = 0; i < bByte.length; i++) {
                sBuffer.append(byteToArrayString(bByte[i]));
            }
            return sBuffer.toString();
        }

        public static String GetMD5Code(String strObj) {
            String resultString = null;
            try {
                resultString = new String(strObj);
                MessageDigest md = MessageDigest.getInstance("MD5");
                // md.digest() 该函数返回值为存放哈希值结果的byte数组
                resultString = byteToString(md.digest(strObj.getBytes("utf-8")));
            } catch (NoSuchAlgorithmException ignore) {
            } catch (UnsupportedEncodingException ignore){
            }
            return resultString;
        }

}
